<?php
// header('Content-Type:text/html;charset=utf-8');
    /**
     * 框架名字（Framework name）：    XwenPHP
     * 框架作者（********Author）：    卢学文
     * 创建时间（****CreateDate）：    2017-11-27
     * 版权所有（*****Copyright）：    Copyright Holder lauwen
     * 联系邮箱（********E-mail）：    lauwencn@gmail.com
     */

    final class XwenPHP{

        public static function run(){
            self::_set_const();
            defined('DEBUG') || define('DEBUG',false);
            if(DEBUG){
                self::_create_dir();
                self::_import_file();
            }else{
                error_reporting(0);
                require TEMP_PATH."/~boot.php";
            }
            Application::run(); 
        }

        /**
         * 设置框架常量
         */
        private static function _set_const(){
            // var_dump(__FILE__);

            $path = str_replace('\\','/',__FILE__);

            /**
             * 框架路径常量
             */
            define('XWENPHP_PATH',dirname($path));                // 框架根目录
            define('XCONFIG_PATH',XWENPHP_PATH.'/Config');        // 框架配置文件目录

            define('XDATA_PATH',XWENPHP_PATH.'/Data');            // 框架数据文件目录
            define('XTPL_PATH',XDATA_PATH.'/Tpl');                // 框架模板文件目录

            define('XLIB_PATH',XWENPHP_PATH.'/Lib');              // 框架类库文件目录
            define('XCORE_PATH',XLIB_PATH.'/Core');               // 框架类库核心文件目录
            define('XFUNCTION_PATH',XLIB_PATH.'/Function');       // 框架类库方法目录

            define('XEXTENDS_PATH',XWENPHP_PATH.'/Extends');      // 框架扩展文件目录
            define('XORG_PATH',XEXTENDS_PATH.'/Org');             // 框架引入的第三方类库文件目录
            define('XTOOL_PATH',XEXTENDS_PATH.'/Tool');           // 框架的工具类文件目录
            
            /**
             * 项目路径常量
             */
            define('ROOT_PATH',dirname(XWENPHP_PATH));            // 项目根目录
            define('TEMP_PATH',ROOT_PATH.'/Temp');                // 项目临时文件目录
            define('LOG_PATH',TEMP_PATH.'/Log');                  // 项目日志文件目录
            define('APP_PATH',ROOT_PATH.'/'.APP_NAME);            // 项目文件所在目录
            define('CONFIG_PATH',APP_PATH.'/Config');             // 项目配置文件所在目录
            define('CONTROLLER_PATH',APP_PATH.'/Controller');     // 项目控制器文件所在目录
            define('TPL_PATH',APP_PATH.'/Tpl');                   // 项目模板文件所在目录
            define('PUBLIC_PATH',TPL_PATH.'/Public');             // 项目模板公共资源文件所在目录        
            define('JS_PATH',PUBLIC_PATH.'/js');                  // 项目模板公共资源文件所在目录         
            define('CSS_PATH',PUBLIC_PATH.'/css');                // 项目模板公共资源文件所在目录         
            define('IMAGE_PATH',PUBLIC_PATH.'/image');            // 项目模板公共资源文件所在目录         
            define('FONT_PATH',PUBLIC_PATH.'/font');              // 项目模板公共资源文件所在目录       
            
            /**
             * 项目间公共文件目录
             */
            define('COMMON_PATH',ROOT_PATH.'/Common');            // 各项目公共文件目录
            define('COMMON_CONFIG_PATH',COMMON_PATH.'/Config');   // 公共配置文件目录
            define('COMMON_MODEL_PATH',COMMON_PATH.'/Model');     // 公共模型文件目录
            define('COMMON_LIB_PATH',COMMON_PATH.'/Lib');         // 公共类库文件目录  


            define('XWENPHP_VERSION','1.0');

            //设置判断请求类型是否为POST类型的常量
            define('IS_POST',($_SERVER['REQUEST_METHOD'] == 'POST') ? true : false);

            //设置判断请求是否为ajax请求的常量
            if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
                define('IS_AJAX',true);
            }else{
                define('IS_AJAX',false);
            }
        }

        /**
         * 创建项目所需文件目录
         */
        private static function _create_dir(){
            $arr = array(
                APP_PATH,
                CONFIG_PATH,
                CONTROLLER_PATH,
                TPL_PATH,
                PUBLIC_PATH,
                TEMP_PATH,
                LOG_PATH,
                JS_PATH,
                CSS_PATH,
                IMAGE_PATH,
                FONT_PATH,
                COMMON_PATH,
                COMMON_CONFIG_PATH,
                COMMON_MODEL_PATH,
                COMMON_LIB_PATH

            );
            foreach($arr as $v){
                is_dir($v) || mkdir($v,0777,true);

                //为每个新创建的文件夹创建index.html，防止目录结构被暴露
                $path = $v.'/index.html';
                $str = "";
                is_file($path) || file_put_contents($path,$str);

            }
            //将success和error页面从框架目录复制到项目目录
            is_file(TPL_PATH.'/success.html') || copy(XTPL_PATH.'/success.html',TPL_PATH.'/success.html');
            is_file(TPL_PATH.'/error.html') || copy(XTPL_PATH.'/error.html',TPL_PATH.'/error.html');
        }

        /**
         * 引入框架运行所必需文件
         */
        private static function _import_file(){
            $fileArr = array(
                XFUNCTION_PATH.'/function.php',
                XCORE_PATH.'/Controller.class.php',
                XCORE_PATH.'/Application.class.php',
                XCORE_PATH.'/Log.class.php',
            );
            $str = '';
            foreach($fileArr as $v){
                $str .= trim(substr(file_get_contents($v),5,-2)); 
                require_once $v;
            }
            $str = "<?php\r\n".$str."\n\r?>";
            file_put_contents(TEMP_PATH."/~boot.php",$str) || die("Access not allow.");
        }
    }

    //实例化该类并运行run()方法
    XwenPHP::run();




?>